/*
 * Registro.cpp
 *
 *  Created on: 30/10/2011
 *      Author: damnvb
 */
#include <iostream>
#include "Registro.h"

int Registro::ERROR = -1;

Registro::Registro(int forDebug, string key)
{
	this->key = key;
	par_libro myPar1 = { forDebug, forDebug +1 };
	forDebug++; forDebug++;
	par_libro myPar2 = { forDebug, forDebug +1 };
	forDebug++; forDebug++;
	par_libro myPar3 = { forDebug, forDebug +1 };
	forDebug++; forDebug++;
	par_libro myPar4 = { forDebug, forDebug +1 };
	forDebug++; forDebug++;
	par_libro myPar5 = { forDebug, forDebug +1 };
	forDebug++; forDebug++;
//	par_libro myPar2 = { 66, 67 };
//	par_libro myPar3 = { 68, 69 };
//	par_libro myPar4 = { 70, 71 };
//	par_libro myPar5 = { 72, 73 };

	vector<par_libro> *referencias = new vector<par_libro>();
	referencias->push_back(myPar1);
	referencias->push_back(myPar2);
	referencias->push_back(myPar3);
	referencias->push_back(myPar4);
	referencias->push_back(myPar5);

	this->setValues(*referencias);
	delete referencias;
}

Registro::Registro(string key)
{
	if(key.size()>0){
			this->key = key;
		}
		else{
			this->key = this->ERROR;
		}
}

Registro::Registro(vector<par_libro> values, string key)
{
	if(key.size()>0){
		this->key = key;
		this->valores = values;
	}
	else{
		this->key = this->ERROR;
	}
}

Registro::Registro(Registro *reg)
{
	this->key = reg->getKey();
	this->valores = reg->getValues();
}

unsigned int Registro::size()
{
	if (this->valores.size() == 0) return (sizeof(int) + this->key.length());
	else {
		return ((sizeof(int) + this->key.length() + sizeof(int) + this->valores.size() * sizeof(int) * 2)+4);
	}
}

Registro* Registro::operator+ (Registro unRegistro){
/*
	if(this->valor != unRegistro.valor)
		throw OperandosInvalidosParaSumaDeRegistros();
	*/
	vector<par_libro> vector_aux = this->getValues();

	for(unsigned int i = 0; i < unRegistro.getValues().size(); i++)
		vector_aux.push_back(unRegistro.getValues()[i]);

	Registro *reg_aux = new Registro(vector_aux, this->getKey());
	return reg_aux;
}

string Registro::getKey()
{
	return this->key;
}

vector<par_libro> Registro::getValues()
{
	return this->valores;
}

void Registro::setValues(vector<par_libro> valores)
{
	this->valores = valores;
}

Registro::~Registro()
{
}


